added some development tools
[windows-sources.git] / developer / Samples / NET 4.6 / Samples for Parallel / Raytracer / Raytracer_CSharp / Sphere.cs
blob3119c5398b98fd17881e03280edd250ea75c0ced
1 //--------------------------------------------------------------------------
2 //
3 // Copyright (c) Microsoft Corporation. All rights reserved.
4 //
5 // File: Sphere.cs
6 //
7 //--------------------------------------------------------------------------
9 using System;
11 namespace Microsoft.ParallelComputingPlatform.ParallelExtensions.Samples
13 class Sphere : SceneObject
15 public Vector Center;
16 public double Radius;
18 public Sphere(Vector center, double radius, Surface surface) : base(surface) { Center = center; Radius = radius; }
20 public override ISect Intersect(Ray ray)
22 Vector eo = Vector.Minus(Center, ray.Start);
23 double v = Vector.Dot(eo, ray.Dir);
24 double dist;
25 if (v < 0)
27 dist = 0;
29 else
31 double disc = Math.Pow(Radius, 2) - (Vector.Dot(eo, eo) - Math.Pow(v, 2));
32 dist = disc < 0 ? 0 : v - Math.Sqrt(disc);
34 if (dist == 0) return ISect.Null;
35 return new ISect(this, ray, dist);
38 public override Vector Normal(Vector pos)
40 return Vector.Norm(Vector.Minus(pos, Center));